package cn.rkylin.oms.common.event;

/**
 * 系统事件总线
 * 
 * @author wangxiaoyi
 * @since: 2017年4月13日 3:44
 */
@SuppressWarnings("rawtypes")
public interface IEventBus {
	/**
	 * 注册事件处理器
	 *
	 * @param type    事件类型
	 * @param handler 处理器
	 * @param isDefer 是否延迟处理
	 * @param <H>
	 */
	<H extends EventHandler> void addHandler(EventTypeCodeEnum type, H handler, boolean isDefer);

	/**
	 * 触发事件
	 *
	 * @param event
	 */
	void fireEvent(BusinessEvent<EventHandler> event) throws Exception;

	/**
	 * 取得事件处理器
	 *
	 * @param type  事件类型
	 * @param index 事件下标，一类事件对应多个处理器
	 * @return
	 */
	EventHandler getHandler(EventTypeCodeEnum type, int index);

	/**
	 * 取得一类事件类的处理器数量
	 *
	 * @param type
	 * @return
	 */
	int getHandlerCount(EventTypeCodeEnum type);
}
